package com.zhaohanlin.start;

import org.junit.Test;

import java.util.Arrays;

/**
 * @author zhaohanlin
 */

public class TestThree {
    @Test
    public void oneArrayBuild() {

        // 仅指定内容
        // int[] arrA = new int[]{1, 2314, 123}
        int[] arrA = {1, 2314, 123};
        System.out.println(arrA[0]);
        System.out.println(arrA[1]);
        System.out.println(arrA[2]);

        // 仅指定长度
        int[] arrB = new int[3];
        arrB[0] = 1;
        arrB[1] = 2314;
        arrB[2] = 123;
        System.out.println(arrB[0]);
        System.out.println(arrB[1]);
        System.out.println(arrB[2]);
    }

    public void oneArrayTraverse() {
        int[] arrA = {1, 2314, 123};

        char[] arrB = {'h', 'i'};

        // 引用数据类型输出内存地址
        System.out.println(arrA);

        // 因为String的特权导致，char[]是可以直接打印输出的（String的底层就是char数组），
        System.out.println(arrB);

        // 所以如果非要查看char[]的内存地址，可以将其拼接一个空字符串再输出，或者对其使用 `toString()`。
        System.out.println("char数组内存地址：" + arrB.toString());

        // 数组.length 返回数组中有多少个元素
        // 利用普通的for循环进行遍历
        for (int i = 0, j = arrA.length; i < j; i++) {
            System.out.println(arrA[i]);
        }

        // 如果需要从头到尾遍历，可以使用for-each循环
        for (int e : arrA) {
            System.out.println(e);
        }

        // 快速查看一下数组
        System.out.println(Arrays.toString(arrA));
    }

        @Test
        public void twoArrayBuild () {

            // 仅指定内容
            // int[][] arrA = new int[][]{{1, 2, 3}, {4, 5}, {9, 8}};
            int[][] arrA = {
                    {32, 64, 22, 1},
                    {157, 655, 23, 79},
                    {445, 18, 77}
            };

            // 快速查看一下数组
            System.out.println(Arrays.deepToString(arrA));

            // 仅指定长度
            int[][] arrB = new int[3][4];
            arrB[0][0] = 32;
            arrB[0][1] = 64;
            arrB[0][2] = 22;
            arrB[0][3] = 1;

            arrB[1][0] = 157;
            arrB[1][1] = 655;
            arrB[1][2] = 23;
            arrB[1][3] = 79;


            arrB[2][0] = 445;
            arrB[2][1] = 18;
            arrB[2][2] = 77;

            // 快速查看一下数组
            System.out.println(Arrays.deepToString(arrB));
        }

        @Test
        public void twoArrayTraverse () {

            int[][] arrA = {
                    {32, 64, 22, 1},
                    {157, 655, 23, 79},
                    {445, 18, 77, 90}
            };

            // 使用fori遍历
            for (int i = 0, j = arrA.length; i < j; i++) {
                for (int m = 0, n = arrA[i].length; m < n; m++) {
                    System.out.print(arrA[i][m] + "\t");
                }
                System.out.println();
            }

            // 使用foreach遍历
            for (int[] e : arrA) {
                for (int i : e) {
                    System.out.print(i + "\t");
                }
                System.out.println();
            }

        }
    }
